import PropTypes from '../_util/vue-types';
import { isString, isFunction } from '../_util/utils';
import warning from '../_util/warning';

// 默认只清除空格
let defaultRules = str => str.replace(/^\s*(\S*(.*\S)*)\s*$/, '$1');

let globalOptions = {
  defaultContentWrapper: void 0,
  inputFilterFunc: defaultRules,
};

export const setContentWrapper = content => {
  globalOptions.defaultContentWrapper = content;
};

export const generateInputFilterFunc = value => {
  if (isString(value)) {
    let reg = new RegExp(`^[${value}]*([^${value}]*(.*[^${value}])*)[${value}]*$`);
    return str => {
      return str.replace(reg, '$1');
    };
  }

  if (isFunction(value)) {
    return value;
  }

  warning(true, `value [${value}] is not String or Function`);

  return defaultRules;
};

export const setInputFilterRules = value => {
  globalOptions.inputFilterFunc = generateInputFilterFunc(value);
};

export default function() {
  return {
    // 表格容器
    contentWrapper: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).def(
      () => globalOptions.defaultContentWrapper,
    ),
    // 格式化输入框筛选项
    formatInputFilter: PropTypes.oneOfType([PropTypes.string, PropTypes.func]).def(
      () => globalOptions.inputFilterFunc,
    ),
    //表格行的key
    rowKey: PropTypes.string.def('id'),
    //获取表格数据的方法
    ajaxFn: PropTypes.func,
    //表格筛选条件
    filters: PropTypes.object.def({}),
    //表头信息
    tableColumns: PropTypes.array.isRequired,
    //表格数据
    tableData: PropTypes.array.isRequired,
    //表格额外的props
    tableProp: PropTypes.object.def({}),
    //表格额外的监听事件
    tableListener: PropTypes.object.def({}),
    // 分页配置，目前只使用pageSize
    pagerOption: PropTypes.object.def({}),
    //是否需要分页
    needPagination: PropTypes.bool.def(true),
    //表格tbody最大高度，可设置为none，表示不设置
    maxHeight: PropTypes.string,
  };
}
